﻿Imports System.Resources
Imports System.Threading
Imports Biz
Imports BLL


Public Class ctrlListaUsuarios

    Private _llamador As frmMainMetro
    Private _ctrlNuevoUsuario As ctrlNuevoUsuario
    Private _RM As ResourceManager


    Public Sub SetIdioma()

        _RM = New ResourceManager("UI.Idiomas", System.Reflection.Assembly.GetExecutingAssembly)

        btnNuevo.Text = _RM.GetString("btnNuevo")
        btnEditar.Text = _RM.GetString("btnEditar")

        SetAyudaContextual()

    End Sub


    Public Property Llamador() As frmMainMetro
        Get
            Return _llamador
        End Get
        Set(value As frmMainMetro)
            _llamador = value
        End Set
    End Property

    Public Sub CargarGrilla()
        Dim oUsuario As cUsuario
        Dim colObjetos As Collection
        Dim oNode As DevComponents.AdvTree.Node


        advTreeUsuarios.BeginUpdate()

        advTreeUsuarios.Nodes.Clear()

        Try
            colObjetos = GestorUsuario.Instance.Consultar

            If Not colObjetos Is Nothing Then

                For Each oUsuario In colObjetos

                    oNode = New DevComponents.AdvTree.Node

                    oNode.Tag = oUsuario.Usu_Legajo
                    oNode.Text = oUsuario.Usu_Legajo
                    oNode.Cells.Add(New DevComponents.AdvTree.Cell(oUsuario.Usu_Nombre))
                    oNode.Cells.Add(New DevComponents.AdvTree.Cell(oUsuario.Usu_Apellido))
                    oNode.Cells.Add(New DevComponents.AdvTree.Cell(oUsuario.Idioma.Idi_Nombre))
                    oNode.Cells.Add(New DevComponents.AdvTree.Cell(oUsuario.Estado_Usuario.EstU_Descrip))

                    advTreeUsuarios.Nodes.Add(oNode)

                Next
            End If

        Catch ex As Excepciones.UsuarioFalloConsultar
            Main.ManejarExcepcion(ex)
        Catch ex As Exception
            Main.ManejarExcepcion(ex)
        End Try

        advTreeUsuarios.EndUpdate()

        advTreeUsuarios.Refresh()

    End Sub

    Public Sub CargarGrillaFamilias(oUsuario As cUsuario)
        Dim oFamilia As cFamilia
        Dim colObjetos As Collection
        Dim oNode As DevComponents.AdvTree.Node


        advTreeUsuarioGrupos.BeginUpdate()

        advTreeUsuarioGrupos.Nodes.Clear()

        Try
            colObjetos = GestorUsuario.Instance.ConsultarFamilias(oUsuario)

            If Not colObjetos Is Nothing Then

                For Each oFamilia In colObjetos

                    oNode = New DevComponents.AdvTree.Node

                    oNode.CheckBoxVisible = True

                    oNode.Tag = oFamilia.Fam_Codigo
                    oNode.Text = oFamilia.Fam_Descrip

                    oNode.Checked = oFamilia.Checked

                    advTreeUsuarioGrupos.Nodes.Add(oNode)

                Next
            End If

        Catch ex As Excepciones.FamiliaFalloConsultar
            Main.ManejarExcepcion(ex)
        Catch ex As Exception
            Main.ManejarExcepcion(ex)
        End Try

        advTreeUsuarioGrupos.EndUpdate()

        advTreeUsuarioGrupos.Refresh()

    End Sub

    Public Sub CargarGrillaPatentes(oUsuario As cUsuario)
        Dim oPatente As cPatente
        Dim colObjetos As Collection
        Dim oNode As DevComponents.AdvTree.Node


        advTreeUsuarioPermisos.BeginUpdate()

        advTreeUsuarioPermisos.Nodes.Clear()

        Try
            colObjetos = GestorUsuario.Instance.ConsultarPatentes(oUsuario)

            If Not colObjetos Is Nothing Then

                For Each oPatente In colObjetos

                    oNode = New DevComponents.AdvTree.Node

                    oNode.CheckBoxVisible = True

                    oNode.Tag = oPatente.Pat_Codigo
                    oNode.Text = oPatente.Pat_Descripcion

                    oNode.Checked = oPatente.Checked

                    advTreeUsuarioPermisos.Nodes.Add(oNode)

                Next
            End If

        Catch ex As Excepciones.UsuarioFalloConsultarPatentes
            Main.ManejarExcepcion(ex)
        Catch ex As Exception
            Main.ManejarExcepcion(ex)
        End Try

        advTreeUsuarioPermisos.EndUpdate()

        advTreeUsuarioPermisos.Refresh()

    End Sub

    Private Sub btnNuevo_Click(sender As Object, e As EventArgs) Handles btnNuevo.Click

        Try

            If Not GestorUsuario.Instance.TienePermiso(AppCurrentState.UsuarioLogueado, New cPatente(Utils.Enumeradores.Patentes.AdminSeguridad)) Then
                frmMainMetro.StatusBarLabel.Text = "El usuario no posee permisos suficientes para realizar esta operación"
                Exit Sub
            End If

            _llamador._ctrlNuevoUsuario.CargarComboIdioma()
            _llamador._ctrlNuevoUsuario.MostrarParaAlta()
            _llamador.ShowModalPanel(_llamador._ctrlNuevoUsuario, DevComponents.DotNetBar.Controls.eSlideSide.Left)


        Catch ex As Excepciones.UsuarioFalloConsultaTieneAcceso
            Main.ManejarExcepcion(ex)
        Catch ex As Exception
            Main.ManejarExcepcion(ex)
        End Try

    End Sub

    Private Sub btnEditar_Click(sender As Object, e As EventArgs) Handles btnEditar.Click
        Dim oAux As cUsuario

        Try

            If Not GestorUsuario.Instance.TienePermiso(AppCurrentState.UsuarioLogueado, New cPatente(Utils.Enumeradores.Patentes.AdminSeguridad)) Then
                frmMainMetro.StatusBarLabel.Text = "El usuario no posee permisos suficientes para realizar esta operación"
                Exit Sub
            End If

            If Not advTreeUsuarios.SelectedNode Is Nothing Then
                Try
                    oAux = New cUsuario
                    oAux.Usu_Legajo = advTreeUsuarios.SelectedNode.Tag
                    oAux = GestorUsuario.Instance.Buscar(oAux)

                    _llamador._ctrlEdicionUsuario.CargarComboIdioma()
                    _llamador._ctrlEdicionUsuario.CargarComboEstado()
                    _llamador._ctrlEdicionUsuario.MostrarParaEdicion(oAux)
                    _llamador.ShowModalPanel(_llamador._ctrlEdicionUsuario, DevComponents.DotNetBar.Controls.eSlideSide.Left)

                Catch ex As Excepciones.UsuarioFalloBuscar
                    Main.ManejarExcepcion(ex)
                Catch ex As Exception
                    Main.ManejarExcepcion(ex)
                End Try
            End If

        Catch ex As Excepciones.UsuarioFalloConsultaTieneAcceso
            Main.ManejarExcepcion(ex)
        Catch ex As Exception
            Main.ManejarExcepcion(ex)
        End Try

    End Sub

    Private Sub btnBloquear_Click(sender As Object, e As EventArgs) Handles btnBloquear.Click
        Dim oAux As cUsuario = New cUsuario

        Try

            If Not GestorUsuario.Instance.TienePermiso(AppCurrentState.UsuarioLogueado, New cPatente(Utils.Enumeradores.Patentes.AdminSeguridad)) Then
                frmMainMetro.StatusBarLabel.Text = "El usuario no posee permisos suficientes para realizar esta operación"
                Exit Sub
            End If

            If Not advTreeUsuarios.SelectedNode Is Nothing Then
                oAux.Usu_Legajo = Utils.Convert.ToInt16(advTreeUsuarios.SelectedNode.Tag)

                Try
                    GestorUsuario.Instance.EstadoBloquear(oAux)
                    GestorBitacora.Instance.Loguear(New cBitacora_Usuario(AppCurrentState.UsuarioLogueado.Usu_Legajo, Utils.Enumeradores.Bitacora.SegUsuarioBloquear))

                    _llamador.RefrescarGrillas()

                Catch ex As Excepciones.UsuarioFalloEditar
                    Main.ManejarExcepcion(ex)
                Catch ex As Exception
                    Main.ManejarExcepcion(ex)
                End Try
            End If

        Catch ex As Excepciones.UsuarioFalloConsultaTieneAcceso
            Main.ManejarExcepcion(ex)
        Catch ex As Exception
            Main.ManejarExcepcion(ex)
        End Try

    End Sub

    Private Sub btnActivar_Click(sender As Object, e As EventArgs) Handles btnActivar.Click
        Dim oAux As cUsuario = New cUsuario

        Try

            If Not GestorUsuario.Instance.TienePermiso(AppCurrentState.UsuarioLogueado, New cPatente(Utils.Enumeradores.Patentes.AdminSeguridad)) Then
                frmMainMetro.StatusBarLabel.Text = "El usuario no posee permisos suficientes para realizar esta operación"
                Exit Sub
            End If

            If Not advTreeUsuarios.SelectedNode Is Nothing Then
                oAux.Usu_Legajo = Utils.Convert.ToInt16(advTreeUsuarios.SelectedNode.Tag)

                Try
                    GestorUsuario.Instance.EstadoActivar(oAux)
                    GestorBitacora.Instance.Loguear(New cBitacora_Usuario(AppCurrentState.UsuarioLogueado.Usu_Legajo, Utils.Enumeradores.Bitacora.SegUsuarioActivar))

                    _llamador.RefrescarGrillas()

                Catch ex As Excepciones.UsuarioFalloEditar
                    Main.ManejarExcepcion(ex)
                Catch ex As Exception
                    Main.ManejarExcepcion(ex)
                End Try
            End If

        Catch ex As Excepciones.UsuarioFalloConsultaTieneAcceso
            Main.ManejarExcepcion(ex)
        Catch ex As Exception
            Main.ManejarExcepcion(ex)
        End Try

    End Sub

    Private Sub advTreeUsuarios_SelectedIndexChanged(sender As Object, e As EventArgs) Handles advTreeUsuarios.SelectedIndexChanged
        Dim oUsuario As cUsuario

        If Not advTreeUsuarios.SelectedNode Is Nothing Then
            oUsuario = New cUsuario
            oUsuario.Usu_Legajo = Utils.Convert.ToInt16(advTreeUsuarios.SelectedNode.Tag)

            CargarGrillaFamilias(oUsuario)
            CargarGrillaPatentes(oUsuario)

            btnActivar.Enabled = oUsuario.Usu_Legajo <> 1
            btnBloquear.Enabled = oUsuario.Usu_Legajo <> 1
            'btnNuevo.Enabled = oUsuario.Usu_Legajo <> 1
            btnEditar.Enabled = oUsuario.Usu_Legajo <> 1

            advTreeUsuarioGrupos.Enabled = oUsuario.Usu_Legajo <> 1
            advTreeUsuarioPermisos.Enabled = oUsuario.Usu_Legajo <> 1
        End If

    End Sub

    Private Sub advTreeUsuarioGrupos_AfterCheck(sender As Object, e As DevComponents.AdvTree.AdvTreeCellEventArgs) Handles advTreeUsuarioGrupos.AfterCheck
        Dim oUsuario As cUsuario
        Dim oFamilia As cFamilia


        If Not advTreeUsuarios.SelectedNode Is Nothing Then
            oUsuario = New cUsuario
            oFamilia = New cFamilia

            oUsuario.Usu_Legajo = Utils.Convert.ToInt16(advTreeUsuarios.SelectedNode.Tag)
            oFamilia.Fam_Codigo = Utils.Convert.ToInt16(e.Cell.Parent.Tag)

            Try
                If e.Cell.Checked Then
                    GestorUsuario.Instance.Ingresar_Familia(oUsuario, oFamilia)
                Else
                    GestorUsuario.Instance.Remover_Familia(oUsuario, oFamilia)
                End If

            Catch ex As Excepciones.UsuarioFalloBajaAcceso
                Main.ManejarExcepcion(ex)
            Catch ex As Excepciones.UsuarioFalloAltaAcceso
                Main.ManejarExcepcion(ex)
            Catch ex As Exception
                Main.ManejarExcepcion(ex)
            End Try
        End If

    End Sub

    Private Sub advTreeUsuarioPermisos_AfterCheck(sender As Object, e As DevComponents.AdvTree.AdvTreeCellEventArgs) Handles advTreeUsuarioPermisos.AfterCheck
        Dim oUsuario As cUsuario
        Dim oPatente As cPatente


        If Not advTreeUsuarios.SelectedNode Is Nothing Then
            oUsuario = New cUsuario
            oPatente = New cPatente

            oUsuario.Usu_Legajo = Utils.Convert.ToInt16(advTreeUsuarios.SelectedNode.Tag)
            oPatente.Pat_Codigo = Utils.Convert.ToInt16(e.Cell.Parent.Tag)

            Try
                If e.Cell.Checked Then
                    GestorUsuario.Instance.Ingresar_Patente(oUsuario, oPatente)
                Else
                    GestorUsuario.Instance.Remover_Patente(oUsuario, oPatente)
                End If

            Catch ex As Excepciones.UsuarioFalloAltaAcceso
                Main.ManejarExcepcion(ex)
            Catch ex As Excepciones.UsuarioFalloBajaAcceso
                Main.ManejarExcepcion(ex)
            Catch ex As Exception
                Main.ManejarExcepcion(ex)
            End Try

        End If

    End Sub

    Public Sub SetAyudaContextual()
        _RM = New ResourceManager("UI.AyudaContextual", System.Reflection.Assembly.GetExecutingAssembly)

        HelpProviderForm.SetHelpString(advTreeUsuarios, "Lista de usuarios del sistema")
        HelpProviderForm.SetHelpString(advTreeUsuarioGrupos, "Lista de grupos de asegurables del sistema")
        HelpProviderForm.SetHelpString(advTreeUsuarioPermisos, "Lista de asegurables del sistema")

    End Sub

    Public Sub Inicializar()

        CargarGrilla()
        SetAyudaContextual()

    End Sub

    Private Sub advTreeUsuarios_Click(sender As Object, e As EventArgs) Handles advTreeUsuarios.Click

    End Sub
End Class
